/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.asportoonline.integration;

import java.util.List;
import javax.ejb.Local;
import org.asportoonline.entities.Cliente;

/**
 * Interfaccia contenente le intestazioni dei metodi da sviluppare per interfacciarsi all'entità
 * persistente Cliente.
 * 
 * @author fe
 */
@Local
public interface ClienteFacade {

    /**
     * Inserisce un nuovo Cliente, che deve avere un email univoca.
     * 
     * @param cliente 
     * @see Cliente
     */
    void create(Cliente cliente);

    /**
     * Modifica un cliente esistente.
     * 
     * @param cliente 
     * @see Cliente
     */
    void edit(Cliente cliente);

    /**
     * Rimuove un cliente.
     * 
     * @param cliente 
     * @see Cliente
     */
    void remove(Cliente cliente);

    /**
     * Cerca un Cliente in base all'ID.
     * 
     * @param id ID del cliente.
     * @return se l'ID esiste restituisce il Cliente, altrimenti restituisce null.
     * @see Cliente
     */
    Cliente find(Object id);

    /**
     * Cerca tutti i Clienti presenti nel database.
     * 
     * @return restituisce una lista contenente tutti i Clienti presenti nel database; 
     * se non ce ne sono restituisce null.
     * @see Cliente
     */
    List<Cliente> findAll();

    /**
     * Cerca un Cliente in base all'ID.
     * 
     * @param id ID del cliente.
     * @return se l'ID esiste restituisce il Cliente, altrimenti restituisce null.
     * @see Cliente
     */
    Cliente find(Long id);
    
    /**
     * Cerca un Cliente in base all'email; l'email è univoca.
     * 
     * @param email 
     * @return se l'email esiste restituisce il Cliente, altrimenti restituisce null.
     * @see Cliente
     */
    Cliente find(String email);
    
    /**
     * Inserisce un nuovo Cliente, che deve avere un email univoca.
     * 
     * @param cliente 
     * @see Cliente
     */
    void persist(Cliente cliente);
    
}
